Performing math on variables that are declared - explicitly or implicitly - as DISPLAY
or NATIONAL
is much less efficient
than on COMPUTATIONAL
, COMP
, or BINARY
variables. That’s because COMP
variables, for instance, are
defined for binary storage, which makes math on them more efficient. That’s why values that are going to be used primarily for math should be declared
with a math type. When math isn’t a primary use, it may not make sense to change the declared type, but MOVE
ing the value to a
COMP
variable and performing the math on it instead would.
It is important to note however, that COMPUTATIONAL
, COMP
, and BINARY
formats should be used with caution if
the variable will be passed to other systems which may not use the same storage format.
Noncompliant code example
01 W-AMOUNT-VALUE PIC 9(17).
01 W-AMOUNT-DECIMAL PIC 9.
COMPUTE W-CONV-AMOUNT = W-AMOUNT-VALUE * 10 ** W-AMOUNT-DECIMAL *> Noncompliant
Compliant solution
01 W-AMOUNT-VALUE PIC 9(17) COMP-5.
01 W-AMOUNT-DECIMAL PIC 9 COMP-5.
COMPUTE W-CONV-AMOUNT = W-AMOUNT-VALUE * 10 ** W-AMOUNT-DECIMAL